package spring.mvc;

import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 基于 Java-based 配置 注册一个 DispatcherServlet，代替 web.xml 的功能
 *
 * @author ME
 * @date   2020/1/10
 */
public class MyDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 相当于 xml配置中 ContextLoaderListener 的 applicationContext.xml
     *  负责配置 Spring Bean
     *
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{ AppConfig.class };
    }

    /**
     * 相当于 xml配置的 springmvc-servlet.xml
     *  负责配置 dispatcher-servlet
     *
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{ MvcConfig.class };
    }

    /**
     * "/" 会将所有的请求映射到 DispatcherServlet 上，即他是应用默认的 Servlet
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{ "/" };
    }

    /**
     * 配置自定义过滤器：对 request的 UTF-8解码
     *
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new CharacterEncodingFilter("UTF-8") };
    }
}
